#include "FreeRTOS.h"
#include "task.h"
#include "stm32f4xx_hal.h"
#include <stdio.h>
#include <string.h>


// 任务句柄与全局变量
TaskHandle_t led_task_handle = NULL;
uint8_t led_task = 1;            // 任务1运行状态标志（1：运行，0：暂停）
char led_status_str[30];

// GPIO初始化：同时配置PC13（LED）和PA0（按键）
static void LED_GPIO_Init(void)
{
    printf("任务开始1\r\n");
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    // 使能GPIOA和GPIOC时钟（PC13在GPIOC）
    __HAL_RCC_GPIOC_CLK_ENABLE();

    // 初始化PC13（LED）：推挽输出，无上下拉，低速
    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);  // 初始熄灭
    GPIO_InitStruct.Pin = GPIO_PIN_13;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}

void check_led_status(void)
{
    GPIO_PinState pin_state = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13);
    
    if (pin_state == GPIO_PIN_SET) {  // 引脚为高电平（LED亮）
        strcpy(led_status_str, "LED在工作");
    } else {  // 引脚为低电平（LED灭）
        strcpy(led_status_str, "LED未工作");
    }
}

// 点亮灯的任务：控制PC13LED闪烁
void Led_Task(void *pvParameters)
{
    LED_GPIO_Init();
    while (1) {
        // 只有当运行标志为1时才执行闪烁逻辑
        if (led_task) {
            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
            vTaskDelay(150);
            
            HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
            vTaskDelay(50);
        } else {
            // 任务暂停时仅延时等待，不执行闪烁
            vTaskDelay(10);
        }
    }
}

